home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.2 / obscured-subviews.st < prev    next >
Text File  |  1993-07-24  |  5KB  |  183 lines

  1. "    NAME        obscured-subviews
  2.     AUTHOR        neild@cs.man.ac.uk
  3.     FUNCTION subview obscured by superview is seen 
  4.     ST-VERSIONS    2.2
  5.     PREREQUISITES     
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    22 Jan 1989
  10. SUMMARY    obscured-subviews
  11.     (neild) ""fixes so that a sub view obscured by its
  12.    super view will display properly.""(2.2)
  13. "!
  14. !View methodsFor: 'display transformation'!
  15.  
  16. displayScale: numberOrPoint 
  17.     "Apply the display transformation's scale of the receiver to numberOrPoint
  18.     and answer the resulting scaled object."
  19.  
  20.     ^(numberOrPoint * self displayTransformation scale) rounded! !
  21.  
  22. !View methodsFor: 'window access'!
  23.  
  24. insetWindow
  25.     "Answer my window inset by my, inverse display scaled, border widths."
  26.  
  27.     ^self getWindow
  28.         insetBy: (self borderWidths scaleBy: self displayTransformation inverseScale)! !
  29.  
  30. !View methodsFor: 'displaying'!
  31.  
  32. displaySafe: aBlock 
  33.     "Do nothing if the receiver is the top view (see StandardSystemView) else
  34.     ask the receiver's super view to safely display aBlock. Sub classes may
  35.     reimplement this to cater for overlapping views and/or caching etc. Safe display
  36.     means that overlapping views are not corrupted, amongst other things.
  37.     aBlock should only alter the Display."
  38.  
  39.     self isTopView
  40.         ifTrue: [ aBlock value ] "better than an infinite loop"
  41.         ifFalse: [ self superView displaySafe: aBlock for: self ]! !
  42.  
  43. !View methodsFor: 'display box access'!
  44.  
  45. windowDisplayBox
  46.     "Answer the region in Display coordinates corresponding to my window;
  47.     without regard to the insetDisplayBox of any super view."
  48.  
  49.     ^self displayTransform: self window! !
  50.  
  51. !View methodsFor: 'window access'!
  52.  
  53. insetDisplayWindow
  54.     "Answer the region in the window coordinate system corresponding to my
  55.     inset display box."
  56.  
  57.     ^self inverseDisplayTransform: self insetDisplayBox! !
  58.  
  59. !View methodsFor: 'display box access'!
  60.  
  61. insetWindowDisplayBox
  62.     "Answer my windowDisplayBox inset by my border widths."
  63.  
  64.     ^self windowDisplayBox insetBy: self borderWidth! !
  65.  
  66. !View methodsFor: 'displaying'!
  67.  
  68. displaySafe: aBlock for: aSubView
  69.     "Do nothing if the receiver is the top view (see StandardSystemView) else
  70.     ask the receiver's super view to safely display aBlock. Sub classes may
  71.     reimplement this to cater for overlapping views and/or caching etc. Safe display
  72.     means that overlapping views are not corrupted, amongst other things.
  73.     aBlock should only alter the Display."
  74.  
  75.     self displaySafe: aBlock!
  76.  
  77. displayView
  78.     "Subclasses should redefine View|displayView in order to display particular 
  79.     objects associated with the View such as labels, lines, boxes, etc."
  80.  
  81.     self isInsetDisplayBoxValid ifFalse: [ ^self ].
  82.     ^self! !
  83.  
  84. !View methodsFor: 'testing'!
  85.  
  86. isDisplayBoxValid
  87.  
  88.     ^self displayBox corner > (self displayBox origin)! !
  89.  
  90. !View methodsFor: 'displaying'!
  91.  
  92. displayBorder
  93.     "Display the receiver's border (using the receiver's borderColor)."
  94.  
  95.     self isDisplayBoxValid ifFalse: [ ^self ].
  96.     self borderWidth = 0
  97.         ifTrue:
  98.             [self insideColor == nil
  99.                 ifFalse: 
  100.                     [Display fill: self displayBox mask: self insideColor]]
  101.         ifFalse:
  102.             [superView isNil
  103.                     ifTrue:    [Display
  104.                                 border: self displayBox
  105.                                 widthRectangle: self borderWidth
  106.                                 mask: borderColor]
  107.                     ifFalse:    [Display
  108.                                 border: self windowDisplayBox
  109.                                 widthRectangle: self borderWidth
  110.                                 mask: borderColor
  111.                                 clippingBox: superView insetDisplayBox].
  112.             (self insideColor notNil and: [ self isInsetDisplayBoxValid ])
  113.                 ifTrue: [Display fill: self insetDisplayBox mask: self insideColor]]! !
  114.  
  115. !View methodsFor: 'bordering'!
  116.  
  117. borderWidths
  118.     "Answer a Rectangle whose
  119.     left value is the width in display coordinates of the receiver's left border.
  120.     Right, top, and bottom widths are analogous.
  121.     The border width is initially 0. A View with a border width of 0 will not have 
  122.     any border displayed."
  123.  
  124.     ^borderWidth = 0 ifTrue: [ 0@0 extent: 0@0 ] ifFalse: [ borderWidth ]! !
  125.  
  126. !View methodsFor: 'testing'!
  127.  
  128. isInsetDisplayBoxValid
  129.  
  130.     ^self insetDisplayBox corner > (self insetDisplayBox origin)! !
  131.  
  132. !ScrollController methodsFor: 'initialize-release'!
  133.  
  134. initialize
  135.     super initialize.
  136.     scrollBar _ Quadrangle new.
  137.     scrollBar borderWidthLeft: 2 right: 1 top: 2 bottom: 2.
  138.     marker _ Quadrangle new.
  139.     marker insideColor: Form gray! !
  140.  
  141. !StandardSystemView class methodsFor: 'instance creation'!
  142.  
  143. model: aModel label: labelText minimumSize: minimumSize
  144.     | view |
  145.     view _ self new.
  146.     view model: aModel.
  147.     view label: labelText.
  148.     view minimumSize: minimumSize.
  149.     view borderWidth: 2.
  150.     ^view! !
  151.  
  152. !TextView methodsFor: 'displaying'!
  153.  
  154. display
  155.     "Show the text of the receiver on the display screen."
  156.  
  157.     self isUnlocked
  158.         ifTrue: 
  159.             [self controller
  160.                 wrappingBox: self wrappingBox
  161.                 clippingBox: self insetDisplayBox.
  162.             (controller text isEmpty and: [controller textHasChanged not])
  163.                 ifTrue: [self newText: self getText]].
  164.     super display!
  165.  
  166. displayView
  167.  
  168.     self isUnlocked ifTrue: 
  169.             [self controller
  170.                 wrappingBox: self wrappingBox
  171.                 clippingBox: self insetDisplayBox ].
  172.     self isInsetDisplayBoxValid ifFalse: [ ^self ].
  173.     self clearInside.
  174.     self controller display!
  175.  
  176. wrappingBox
  177.     "Answer a Rectangle to be used as the composition rectangle
  178.     of the paragraph."
  179.  
  180.     ^self insetWindowDisplayBox insetBy: 6@0! !
  181.  
  182.  
  183.